package com.aaa.vegetablemarketexpress.dao;

import com.aaa.vegetablemarketexpress.entity.User;
import com.aaa.vegetablemarketexpress.util.Page;
import com.aaa.vegetablemarketexpress.vo.UserStatisticsVO;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @FileName: UserDao
 * @Description:
 * @Author: qxh
 * @CreateTime: 2025/9/6 14:20
 * @Version: 1.0.0
 */
public interface UserDao {
    /**
     * 根据用户id查询用户信息
     * @param userId
     * @return
     */
    User selectUserById(Long userId);
    /**
     * 分页查询用户列表
     * @param user
     * @return
     */
    List<User> selectUserList(User  user);
    /**
     * 添加用户
     * @param user
     * @return
     */
    int insertUser(User user);
    /**
     * 修改用户
     * @param user
     * @return
     */
    int updateUser(User user);
    /**
     * 删除用户
     * @param userId
     * @return
     */
    int deleteUserById(Long userId);
    /**
     * 检查用户名是否唯一
     */
    int checkUserNameUnique(String userName);
    /**
     * 检查用户是否是管理员
     * @param userId 用户ID
     * @return 1表示是管理员，0表示不是管理员
     */
    Long checkIsAdmin(Long userId);
    /**
     * 根据用户ID获取用户昵称
     * @param userId
     * @return
     */
    String selectNickNameByUserId(Long userId);
    /**
     * 根据店铺ID获取商家名称
     */
    String selectMerchantNameByShopId(Long shopId);

    /**
     * 检查用户是否为商家角色
     */
    int checkUserIsMerchant(Long userId);


    /**
     * 获取用户统计信息
     * @param params 查询参数
     * @return 用户统计信息
     */
    UserStatisticsVO selectUserStatistics(Map<String, Object> params);

    /**
     * 获取用户性别分布
     * @param params 查询参数
     * @return 性别分布数据
     */
    List<Map<String, Object>> selectUserGenderDistribution(Map<String, Object> params);

    /**
     * 获取用户状态分布
     * @param params 查询参数
     * @return 状态分布数据
     */
    List<Map<String, Object>> selectUserStatusDistribution(Map<String, Object> params);

    /**
     * 获取用户注册趋势
     * @param params 查询参数
     * @return 注册趋势数据
     */
    List<Map<String, Object>> selectUserRegisterTrend(Map<String, Object> params);

    /**
     * 获取用户部门分布
     * @param params 查询参数
     * @return 部门分布数据
     */
    List<Map<String, Object>> selectUserDeptDistribution(Map<String, Object> params);
    /**
     * 根据用户名和手机号查询用户
     * @param userName 用户名
     * @param phone 手机号
     * @return 用户信息
     */
    User  selectUserByUserNameAndPhone(@Param("userName") String userName, @Param("phone") String phoneNumber);
}
